home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 4
/
FM Towns Free Software Collection 4 - Disc 1.iso
/
t_os
/
helper
/
source
/
scrn.c
< prev
next >
Wrap
Text File
|
1991-10-18
|
11KB
|
322 lines
/*
01234567890123456789012345678901234567890123456789012345678901234567890123456789--------------------------------------------------------------------------------| xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxx||xxxxxxxxxxxxxx||xxxxxxxxxxxxxx||xxxxxxxxxxxxxx||xxxxxxxxxxxxxx|--------------------------------------------------------------------------------| お好みのメニュ-をどうぞ ||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx|--------------------------------------------------------------------------------| 作 品 名 || 作 者 名 ||TMBD|--------------------------------------------------------------------------------|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||☆☆☆☆||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||☆☆☆☆|
0 1 2 3 4 5 6 7
01234567890123456789012345678901234567890123456789012345678901234567890123456789| 作 品 名 || 作 者 名 |--------------------------------------------------------------------------------|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|--------------------------------------------------------------------------------| 0123 プログラムがあるよ | 前 項 | | 次 項 |
--------------------------------------------------------------------------------
*********************/
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <mos.h>
#include "keyword.h"
#include "graphic.h"
#include "scrn.h"
#include "coldef.h"
#define MSG_X (49*8)
#define MSG_Y 4
#define MSG_X1 (MSG_X-4)
#define MSG_Y1 (MSG_Y-2)
#define MSG_X2 (MSG_X+29*8+3)
#define MSG_Y2 (MSG_Y+17)
#define CLER_X (1*8)
#define CLER_Y 26
#define CLER_M "最初にもどろう"
#define CLER_X1 (CLER_X-4)
#define CLER_Y1 (CLER_Y-2)
#define CLER_X2 (CLER_X+14*8+3)
#define CLER_Y2 (CLER_Y+17)
#define LIST_X (17*8)
#define LIST_Y 26
#define LIST_M "マニュアル表示"
#define LIST_X1 (LIST_X-4)
#define LIST_Y1 (LIST_Y-2)
#define LIST_X2 (LIST_X+14*8+3)
#define LIST_Y2 (LIST_Y+17)
#define PRNT_X (33*8)
#define PRNT_Y 26
#define PRNT_M "プリントアウト"
#define PRNT_X1 (PRNT_X-4)
#define PRNT_Y1 (PRNT_Y-2)
#define PRNT_X2 (PRNT_X+14*8+3)
#define PRNT_Y2 (PRNT_Y+17)
#define INST_X (49*8)
#define INST_Y 26
#define INST_M "コピ-しちゃう"
#define INST_X1 (INST_X-4)
#define INST_Y1 (INST_Y-2)
#define INST_X2 (INST_X+14*8+3)
#define INST_Y2 (INST_Y+17)
#define EXIT_X (65*8)
#define EXIT_Y 26
#define EXIT_M "終わっちゃうよ"
#define EXIT_X1 (EXIT_X-4)
#define EXIT_Y1 (EXIT_Y-2)
#define EXIT_X2 (EXIT_X+14*8+3)
#define EXIT_Y2 (EXIT_Y+17)
#define KEY_X 8
#define KEY_Y 69
#define KEY_L (18*8)
#define KEY_S (20*8)
#define KEY_POS_X(n) ((n%4)*KEY_S+KEY_X)
#define KEY_POS_Y(n) ((n/4)*24+KEY_Y)
#define PRG_NAME_X 8
#define PRG_MAKE_X (47*8)
#define PRG_BITS_X (71*8)
#define PRG_NAME_L (44*8+6)
#define PRG_MAKE_L (31*8+6)
#define PRG_BITS_L (8*8)
#define PRG_Y 261
#define PRG_POS_Y(n) ((n)*22+PRG_Y)
#define MSG2_X (1*8)
#define MSG2_Y 460
#define BACK_X (29*8)
#define BACK_Y 460
#define BACK_M " 前 頁 "
#define BACK_X1 (BACK_X-4)
#define BACK_Y1 (BACK_Y-2)
#define BACK_X2 (BACK_X+8*8+3)
#define BACK_Y2 (BACK_Y+17)
#define NEXT_X (39*8)
#define NEXT_Y 460
#define NEXT_M " 次 頁 "
#define NEXT_X1 (NEXT_X-4)
#define NEXT_Y1 (NEXT_Y-2)
#define NEXT_X2 (NEXT_X+8*8+3)
#define NEXT_Y2 (NEXT_Y+17)
static int sw_flg[10];
int MOS_stei(int x1,int y1,int x2,int y2)
{
int stat=0;
int cl,sw,x,y;
for ( ; ; ) {
MOS_rdpos(&sw,&x,&y);
if ( x >= x1 && x <= x2 && y >= y1 && y <= y2 )
cl = 1;
else
cl = 0;
switch(stat) {
case 0:
if ( cl == 0 || sw == 0 )
return 0;
MOS_disp(OFF);
DSP_box(x1,y1,x2,y2,8,M_XOR);
MOS_disp(ON);
stat = 1;
break;
case 1:
if ( sw == 0 || cl == 0 ) {
MOS_disp(OFF);
DSP_box(x1,y1,x2,y2,8,M_XOR);
MOS_disp(ON);
if ( sw == 0 && cl != 0 )
return 1;
else
return 0;
}
break;
}
}
}
int MENU_no(int rc)
{
int i,sw,x,y;
static struct {
int x1,y1,x2,y2;
int no;
int *sw;
} event_tbl[]={
{ CLER_X1,CLER_Y1,CLER_X2,CLER_Y2,CLER_NO,&sw_flg[0] },
{ LIST_X1,LIST_Y1,LIST_X2,LIST_Y2,LIST_NO,&sw_flg[1] },
{ PRNT_X1,PRNT_Y1,PRNT_X2,PRNT_Y2,PRNT_NO,&sw_flg[2] },
{ INST_X1,INST_Y1,INST_X2,INST_Y2,INST_NO,&sw_flg[3] },
{ EXIT_X1,EXIT_Y1,EXIT_X2,EXIT_Y2,EXIT_NO,&sw_flg[4] },
{ BACK_X1,BACK_Y1,BACK_X2,BACK_Y2,BACK_NO,&sw_flg[5] },
{ NEXT_X1,NEXT_Y1,NEXT_X2,NEXT_Y2,NEXT_NO,&sw_flg[6] },
{ 0,0,0,0,NON_NO }
};
MOS_rdpos(&sw,&x,&y);
if ( sw == 0 )
return NON_NO;
for ( i = 0 ; event_tbl[i].no != NON_NO ; i++ ) {
if ( *event_tbl[i].sw != 0 &&
MOS_stei(event_tbl[i].x1,event_tbl[i].y1,
event_tbl[i].x2,event_tbl[i].y2) != 0 )
return event_tbl[i].no;
}
if ( rc == 0 )
return NON_NO;
for ( i = 0 ; i < 28 ; i++ ) {
if ( x >= (KEY_POS_X(i)-4) && y >= (KEY_POS_Y(i)-2) &&
x <= (KEY_POS_X(i)+KEY_L+3) && y <= (KEY_POS_Y(i)+17) )
return (KEY_NO + i);
}
for ( i = 0 ; i < 9 ; i++ ) {
if ( prg_tbl[i] != NULL &&
( MOS_stei(PRG_NAME_X-4,PRG_POS_Y(i)-2,
PRG_NAME_X+PRG_NAME_L+3,PRG_POS_Y(i)+17) != 0 ||
MOS_stei(PRG_MAKE_X-4,PRG_POS_Y(i)-2,
PRG_MAKE_X+PRG_MAKE_L+3,PRG_POS_Y(i)+17) != 0 ||
MOS_stei(PRG_BITS_X-4,PRG_POS_Y(i)-2,
PRG_BITS_X+PRG_BITS_L+3,PRG_POS_Y(i)+17) != 0 ) )
return (PRG_NO+i);
}
return NON_NO;
}
void KEY_disp(int no)
{
MOS_disp(OFF);
DSP_box(KEY_POS_X(no)-4,KEY_POS_Y(no)-2,
KEY_POS_X(no)+KEY_L+3,KEY_POS_Y(no)+17,
8,M_XOR);
MOS_disp(ON);
}
void KEY_putstr(int no,char *key)
{
MOS_disp(OFF);
gprintf(KEY_POS_X(no),KEY_POS_Y(no),CHR_COL,KEY_COL,"%-18.18s",key);
MOS_disp(ON);
}
void PRG_disp(int no,char *prog,char *make,int bits)
{
MOS_disp(OFF);
gprintf(PRG_NAME_X,PRG_POS_Y(no),ACT_COL,PRG_COL,"%-44.44s",prog);
gprintf(PRG_MAKE_X,PRG_POS_Y(no),ACT_COL,PRG_COL,"%-31.31s",make);
/*****************************************************************
gprintf(PRG_BITS_X,PRG_POS_Y(no),ACT_COL,PRG_COL,"%s%s%s%s",
(bits & 1) ? "☆":" ",
(bits & 2) ? "☆":" ",
(bits & 4) ? "☆":" ",
(bits & 8) ? "☆":" ");
********************************************************************/
MOS_disp(ON);
}
void MSG_disp(char *form,...)
{
va_list arg;
char tmp[256];
va_start(arg,form);
vsprintf((char *)tmp,form,arg);
MOS_disp(OFF);
gputs(MSG_X,MSG_Y,XMENU_COL,MENU_COL,tmp);
MOS_disp(ON);
va_end(arg);
}
void MSG2_disp(char *form,...)
{
va_list arg;
char tmp[256];
va_start(arg,form);
vsprintf((char *)tmp,form,arg);
MOS_disp(OFF);
gputs(MSG2_X,MSG2_Y,XPRG_COL,PRG_COL,tmp);
MOS_disp(ON);
va_end(arg);
}
void MENU_mask(int no,int sw)
{
static struct {
int x,y;
int back;
char *str;
int *sw;
} menu_tbl[]={
{ CLER_X,CLER_Y,MENU_COL,CLER_M,&sw_flg[0] },
{ LIST_X,LIST_Y,MENU_COL,LIST_M,&sw_flg[1] },
{ PRNT_X,PRNT_Y,MENU_COL,PRNT_M,&sw_flg[2] },
{ INST_X,INST_Y,MENU_COL,INST_M,&sw_flg[3] },
{ EXIT_X,EXIT_Y,MENU_COL,EXIT_M,&sw_flg[4] },
{ BACK_X,BACK_Y,PRG_COL,BACK_M,&sw_flg[5] },
{ NEXT_X,NEXT_Y,PRG_COL,NEXT_M,&sw_flg[6] },
{ CLER_X,CLER_Y,MENU_COL,"検索にもどろう",&sw_flg[0] },
{ LIST_X,LIST_Y,MENU_COL,"紹介ファイルの表示",&sw_flg[1] },
};
MOS_disp(OFF);
gputs(menu_tbl[no].x,menu_tbl[no].y,
sw != 0 ? ACT_COL:NON_COL,menu_tbl[no].back,
menu_tbl[no].str);
MOS_disp(ON);
*menu_tbl[no].sw = sw;
}
void SCRN_init(void)
{
int i;
MOS_disp(OFF);
DSP_rbox(0,0,639,47,LINE_COL,MENU_COL,M_PSET); /* Main Menu Back */
DSP_rbox(0,48,639,239,LINE_COL,KEY_COL,M_PSET); /* KeyWord Menu Back */
DSP_rbox(0,240,639,479,LINE_COL,PRG_COL,M_PSET); /* Prog Menu Back */
DSP_wbox(CLER_X1,CLER_Y1,CLER_X2,CLER_Y2,LINE_COL,MENU_COL,M_PSET);
DSP_wbox(LIST_X1,LIST_Y1,LIST_X2,LIST_Y2,LINE_COL,MENU_COL,M_PSET);
DSP_wbox(PRNT_X1,PRNT_Y1,PRNT_X2,PRNT_Y2,LINE_COL,MENU_COL,M_PSET);
DSP_wbox(INST_X1,INST_Y1,INST_X2,INST_Y2,LINE_COL,MENU_COL,M_PSET);
DSP_wbox(EXIT_X1,EXIT_Y1,EXIT_X2,EXIT_Y2,LINE_COL,MENU_COL,M_PSET);
DSP_wbox(BACK_X1,BACK_Y1,BACK_X2,BACK_Y2,LINE_COL,PRG_COL,M_PSET);
DSP_wbox(NEXT_X1,NEXT_Y1,NEXT_X2,NEXT_Y2,LINE_COL,PRG_COL,M_PSET);
for ( i = 0 ; i < 28 ; i++ ) {
DSP_wbox(KEY_POS_X(i)-4,KEY_POS_Y(i)-2,
KEY_POS_X(i)+KEY_L+3,KEY_POS_Y(i)+17,
LINE_COL,KEY_COL,M_PSET);
}
for ( i = 0 ; i < 9 ; i++ ) {
DSP_wbox(PRG_NAME_X-4,PRG_POS_Y(i)-2,
PRG_NAME_X+PRG_NAME_L+3,PRG_POS_Y(i)+17,
LINE_COL,PRG_COL,M_PSET);
DSP_wbox(PRG_MAKE_X-4,PRG_POS_Y(i)-2,
PRG_MAKE_X+PRG_MAKE_L+3,PRG_POS_Y(i)+17,
LINE_COL,PRG_COL,M_PSET);
/**********************************************************
DSP_wbox(PRG_BITS_X-4,PRG_POS_Y(i)-2,
PRG_BITS_X+PRG_BITS_L+3,PRG_POS_Y(i)+17,
LINE_COL,PRG_COL,M_PSET);
***********************************************************/
}
DSP_msg("フリーウェア検索・インスト-ルソフト HELPER",
8,4,0x01,XMENU_COL,MENU_COL,M_PSET);
gputs((28*8),50,CHR_COL,KEY_COL,"お好みのメニュ-をどうぞ");
gputs((16*8),242,XPRG_COL,PRG_COL,"作 品 名");
gputs((57*8),242,XPRG_COL,PRG_COL,"作 者 名");
/******************************************
gputs((71*8),242,XPRG_COL,PRG_COL,"TMBD");
*******************************************/
MOS_disp(ON);
MENU_mask(CLER_NO,OFF);
MENU_mask(LIST_NO,OFF);
MENU_mask(PRNT_NO,OFF);
MENU_mask(INST_NO,OFF);
MENU_mask(EXIT_NO,OFF);
MENU_mask(BACK_NO,OFF);
MENU_mask(NEXT_NO,OFF);
}